【2022年10月版】AWS Transfer Family の SFTP を使ってみた
こんにちは!丸屋 正志です。
今回、AWS Transfer Family の SFTP サービスを使う機会があったので、個人で学んだことをアウトプットしてみました!
そもそも、AWS Transfer Family の SFTPとは? S3バケットへのSFTP接続によるファイル転送を可能とする、フルマネージドサービスとなります。
1, 今回作るモノの構成図
下記のようなイメージとなります。
インターネットに公開し、SFTPサーバーにアクセスする直前のVPCエンドポイントで接続元IPを絞るタイプとなります。
2, 料金について
AWS Transfer Family の SFTP 自体にかかる(※ 2022年10月時点)料金は下記となります。
- エンドポイントで SFTP が有効になっている時間:$0.3/時間
- SFTP データアップロード:$0.04/GB
- SFTP データダウンロード:$0.04/GB
注意点として、AWS Transfer Family の SFTP 料金は、エンドポイントが作成されてから削除されるまで課金し続けます。 停止した場合でも課金は、継続し続けます。
そのため、本格利用の際には月$216
が掛かります。
($216 = $0.3 * 24時間 * 30日という計算です)
最新の料金情報については公式ページをご参照ください。
3, 事前準備
事前に下記の内容を準備する必要があります。
- VPC 環境一式
- パブリックサブネットを最低1個以上
- EIP
- IPv4タイプを最低1個以上
- セキュリティグループ
- 22番ポート
- 接続元をご利用の環境に合わせる
- IAMロール
- S3 バケット
- 検証のために空のバケットを用意
- SSH 鍵
4, やってみた
4.1, ワークフローを作成編
AWS Transfer Family の左ペインから【ワークフロー】にアクセスし、【ワークフローを作成】をクリックします。
画面が遷移したら、『多目的なステップ』の枠にある【ステップを追加】をクリックします。
ステップ 1 : ステップタイプを選択
【ファイルをコピー】を選択し、【次へ】をクリックします。
ローカルから
transfer-user/
にアップロードされたファイルを、ユーザー名毎-copied
フォルダにコピーさせます。
ステップ 2 : パラメータを設定
コピーパラメータを設定
- 『ステップ名』: [任意の名前] (例 : copyfile)
- 『送信先バケット名』:【任意のバケット名を選択】
- 『送信先キープレフィックス』: [任意の名前] (例 : ${transfer:UserName}-copied/)
ステップ 3 : 確認と作成
ファイルをコピー
作成する内容に間違いがないかを確認し、【ステップを作成】をクリックし、画面下辺にある【ワークフローを作成】をクリックします。
4.2, SFTPサーバー を作成編
AWS コンソールから 【AWS Transfer Family】にアクセスし、【サーバーを作成】をクリックします。
ステップ 1 : プロトコルを選択
【SFTP (SSH ファイル転送プロトコル) - Secure Shell 経由のファイル転送】を選択し、【次へ】をクリックします。
ステップ 2 : ID プロバイダーを選択
今回は、サービスマネージドを選択していますが、環境に合わせて選択してください。
SFTP、 FTPS、 または FTP に対応する ID プロバイダー
【サービスマネージド】を選択し、【次へ】をクリックします。
ステップ 3 : エンドポイントを選択
エンドポイントを選択
- 『エンドポイント』: 【VPC でホスト】
- 『アクセス』:【インターネット向け】
- 『VPC』:【任意のVPCを選択】
- 『アベイラビリティーゾーン』:【任意のサブネットとEIP(IPv4)を選択】
- 『セキュリティグループ』:【任意のセキュリティグループを選択】
ステップ 4 : ドメインを選択
ドメイン
【Amazon S3】を選択し、【次へ】をクリックします。
ステップ 5 : 追加の詳細を設定
マネージドワークフロー
※ 画面に表示されていない項目については、デフォルトもしくは空白になっています。
- 『完全なファイルアップロードのワークフロー』:【任意のワークフローを選択】
- 『マネージドワークフロー実行ロール』:【任意のIAMロールを選択】
ステップ 6 : 確認と作成
作成する内容に間違いがないかを確認し、【ステップを作成】をクリックします。
※ 環境を作成している際は、画面を閉じたり移動したりしないようにしてください。
状態がオンラインになるまで、少し待ちます。
- 開始中 : サーバーを起動している状態
- オンライン : サーバーが稼働している状態
4.3, SFTPサーバーにユーザーを追加編
コンソールに表示されている【サーバー ID】をクリックします。
ユーザー追加編
AWS Transfer Family の SFTP を利用するにあたり、専用のユーザーが必要となるため追加いたします。
ユーザー枠にある【ユーザーを追加】をクリックします。
ユーザー設定
- 『ユーザー名』: [任意の名前] (例 : transfer-user)
- 『ロール』:【任意のIAMロールを選択】
- 『ホームディレクトリ』:【任意のバケット名を選択】
SSH パブリックキー
- 『SSH パブリックキー』:【任意のパブリックキーを貼り付け】
作成する内容に間違いがなければ、【追加】をクリックします。
ユーザー追加が完了すると下記画面のようになります。
4.4, SFTPサーバーに接続してみた編
SFTPサーバーに接続するにあたり、初めにエンドポイントの詳細の枠にある【エンドポイント】をコピーします。
いざ、SFTPサーバーへ接続!
上記でコピーしたエンドポイント先をご利用になっているターミナルなどに貼り付けて、接続します。
$ sftp -i ssh鍵 接続するユーザー名@sご利用のエンドポイント名に合わせる ## サンプル実施コマンド ## sftp -i transfer-key transfer-user@s-エンドポイント名.server.transfer.ap-northeast-1.amazonaws.com
ファイルをアップロードしてみる
適当なファイルを用意してアップロードコマンドを実施してみると、下記のような情報が出力されます。
## 実施コマンド sftp> put test.file ## 以下は出力内容 Uploading test.file to /S3バケット名/transfer-user/test.file test.file 100% 687 19.4KB/s 00:00
アップロード後のS3バケットを確認してみる
test.file
が transfer-user/
にアップロードされ、その後に transfer-user-copied/
にコピーされます。
下記フォルダが無い場合は、自動生成されます。
- transfer-user/
- transfer-user-copied/
## 実施コマンド $ aws s3 ls S3バケット名 --recursive ## 以下は出力内容 2022-10-31 14:22:12 687 transfer-user-copied/test.file 2022-10-31 14:22:12 687 transfer-user/test.file
5, Q&A
Q, 作成済みのワークフローの条件を変更したいのですが、既存のワークフローは変更できないですか? A, はい、一度作成したワークフローの条件は変更不可となりますので、新しいワークフローを作成する必要があります。
Q, エンドポイントのタイプを変更したいですが、どうしたら良いですか? A, 該当サーバーを一旦『停止』してから、希望のタイプに切り替えることが可能です。
Q, 利用するポートを22番以外にしたいですが、可能ですか? A, はい、可能です。詳しくは下記 AWSナレッジをご参照ください。 AWS Transfer Family SFTP 対応サーバーエンドポイントで、カスタムリスナーポートを使用して Elastic IP アドレスを有効にする方法を教えてください。
6, 参考情報
- AWS Transfer Familyのワークフロー機能をつかってみた
- [アップデート] AWS Transfer for SFTP が FTP および FTPS に対応!そして AWS Transfer Family へ
- AWS Transfer for SFTP で接続に関するエラーメッセージと対処方法をまとめてみた
- 別のAWS アカウントにあるS3バケットを使用するようにAWS Transfer for SFTPサーバーを設定してみた
- AWS Transfer for SFTPの構成例まとめ (2020年4月版)
- Create an SFTP-enabled server
7, 最後に
初めて AWS Transfer Family の SFTP を使ってみましたが、マネージドサービスという事もあり、運用管理をしなくていいのはメリットだと感じました。
コスト面でいくと検証環境などでは、利用するたびに作成 / 削除をしてもいいかなと思います。